package cn.lili.modules.page.entity.dos;

import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.http.HtmlUtil;
import cn.lili.common.enums.ClientTypeEnum;
import cn.lili.modules.page.entity.dto.PageDataSaveDTO;
import cn.lili.modules.page.entity.enums.PageTypeEnum;
import cn.lili.mybatis.model.BaseSceneEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import java.io.Serial;


/**
 * 页面数据DO
 *
 * @author Bulbasaur
 * @since 2020/12/10 17:42
 */
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("li_page_data")
@ApiModel(value = "页面数据DO")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageData extends BaseSceneEntity {


    @Serial
    private static final long serialVersionUID = 4307548786347705436L;

    @ApiModelProperty(value = "页面命名")
    private String name;

    @ApiModelProperty(value = "页面数据")
    private String pageData;

    /**
     * @see PageTypeEnum
     */
    @ApiModelProperty(value = "页面类型")
    private String pageType;

    /**
     * @see ClientTypeEnum
     * 目前默认是PC和移动端，其他定制等待将来开发。
     */
    @ApiModelProperty(value = "客户端类型")
    private String pageClientType;

    @ApiModelProperty(value = "启用与否")
    private Boolean enable = true;


    @ApiModelProperty(value = "主要页面：部分场景如首页，只能有一个启动，则只能有一个主要页面。这里设置为true，其他相关页面则会自动设置为false")
    private Boolean main = false;

    // 管理端维护数据，提供给C端用户和B端用户使用
    // 店铺维护数据，提供给C端用户使用
    // 供应商维护数据，提供给B端用户使用
    @ApiModelProperty(value = "使用场景")
    private String useScene;

    public String getPageData() {
        if (CharSequenceUtil.isNotEmpty(pageData)) {
            return HtmlUtil.unescape(pageData);
        }
        return pageData;
    }

    public PageData(PageDataSaveDTO pageDataSaveDTO) {
        this.name = pageDataSaveDTO.getName();
        this.pageData = pageDataSaveDTO.getPageData();
        this.pageType = pageDataSaveDTO.getPageType().name();
        this.pageClientType = pageDataSaveDTO.getPageClientType().name();
        this.enable = pageDataSaveDTO.getEnable();
        this.main = pageDataSaveDTO.getMain();
        this.setUseScene(pageDataSaveDTO.getUseScene().name());


    }
}